/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package datos;

/**
 *
 * @author May
 */
import java.sql.CallableStatement;
import java.awt.Image;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;
import java.util.ArrayList;
import java.util.Iterator;
import javax.imageio.ImageIO;
import javax.imageio.ImageReadParam;
import javax.imageio.ImageReader;
import javax.imageio.stream.ImageInputStream;
import negocios.Apreciacion;
import negocios.Atributo_Propio;
import negocios.BusquedaConjunto;
import negocios.BusquedaPrendasDefectos;
import negocios.Busqueda_Defectos_Prenda;
import negocios.Busqueda_Prenda;
import negocios.Busqueda_Prenda_Defectos;
import negocios.Busqueda_Prenda_Lavanderia;
import negocios.Clasificador;
import negocios.Clasificador_Prenda;
import negocios.Color_Prenda;
import negocios.Comentario;
import negocios.Compartir;
import negocios.Conjunto;
import negocios.Estado_Prenda;
import negocios.Genero_Usuario;
import negocios.Medida_Prenda;
import negocios.Medidas_Usuario;
import negocios.Prenda;
import negocios.Registro_Conjunto;
import negocios.Registro_Logeo;
import negocios.Registro_Medidas;
import negocios.Tiene_Atrib;
import negocios.Tipo_Prenda;
import negocios.Usuario;
import negocios.Valor;
import negocios.ubicacion;

public class BaseDeDatosDB {

    private ResultSet resultSet = null;
    DatabaseManager db = new DatabaseManager();
    ///////////////////////////////////////////// GENEROS //////////////////////////////////////////////

    public Genero_Usuario buscarGenero(int codigo) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "select * from genero_usuario where id ='" + codigo + "'";
        ResultSet resultado = db.seleccion(query);//cada tupla, recibir reulset y pasar al array pa q no se borre x cerrarse la conexin
        Genero_Usuario miGenero = null;
        if (resultado != null) {
            resultado.next();
            miGenero = new Genero_Usuario();
            miGenero.setId(resultado.getInt("id"));
            miGenero.setDescripcion(resultado.getString("descripcion"));
        }
        db.cerrarConexion();
        return miGenero;
    }
    ////////////////////////////// COLORES ///////////////////////////////////////////////////////////

    public Color_Prenda buscarColor(int codigo) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "select * from color where id ='" + codigo + "'";
        ResultSet resultado = db.seleccion(query);//cada tupla, recibir reulset y pasar al array pa q no se borre x cerrarse la conexin
        Color_Prenda miColor = null;
        if (resultado != null) {
            resultado.next();
            miColor = new Color_Prenda();
            miColor.setId(resultado.getInt("id"));
            miColor.setColor(resultado.getString("color"));
        }
        db.cerrarConexion();
        return miColor;
    }
    ///////////////////////////////ESTADO PRENDA /////////////////////////////////////////////////

    public Estado_Prenda buscarEstado(int codigo) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "select * from estado_prenda where id ='" + codigo + "'";
        ResultSet resultado = db.seleccion(query);//cada tupla, recibir reulset y pasar al array pa q no se borre x cerrarse la conexin
        Estado_Prenda miEstado = null;
        if (resultado != null) {
            resultado.next();
            miEstado = new Estado_Prenda();
            miEstado.setId(resultado.getInt("id"));
            miEstado.setDescripcion(resultado.getString("descripcion"));
        }
        db.cerrarConexion();
        return miEstado;
    }

    /////////////////////////////////////TIPO PRENDA ////////////////////////////////////////
    public Tipo_Prenda buscarTipo(int codigo) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "select * from tipo_prenda where id ='" + codigo + "'";
        ResultSet resultado = db.seleccion(query);//cada tupla, recibir reulset y pasar al array pa q no se borre x cerrarse la conexin
        Tipo_Prenda miTipo = null;
        if (resultado != null) {
            resultado.next();
            miTipo = new Tipo_Prenda();
            miTipo.setId(resultado.getInt("id"));
            miTipo.setDescripcion(resultado.getString("descripcion"));
        }
        db.cerrarConexion();
        return miTipo;
    }
    //////////////////////////////////////// APRECIACIONES //////////////////////////////////////////

    public boolean grabarApreciacion(Apreciacion miApreciacion) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "insert into apreciacion values('" + miApreciacion.getAtributo() + "')";
        Boolean resultado = db.ingreso(query);
        db.cerrarConexion();
        return resultado;
    }

    public int modificarApreciacion(Apreciacion miApreciacion) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "update apreciacion set atributo='" + miApreciacion.getAtributo()
                + "' where id='" + miApreciacion.getId() + "'";
        int resultado = db.modificacioneliminacion(query);
        db.cerrarConexion();
        return resultado;
    }

    public int eliminarApreciacion(String cedula) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "delete from cliente where cedula='" + cedula + "'";
        int resultado = db.modificacioneliminacion(query);
        db.cerrarConexion();
        return resultado;
    }
    /////////////////////////////////////// TIPOS PRENDA ///////////////////////////////////////////

    public ArrayList listarTipoPrenda() throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "select * from tipo_prenda ";
        ResultSet resultado = db.seleccion(query);
        Tipo_Prenda miPrenda = null;
        ArrayList todos = new ArrayList();
        while (resultado.next()) {
            miPrenda = new Tipo_Prenda();
            miPrenda.setId(resultado.getInt(1));
            miPrenda.setDescripcion(resultado.getString(2));
            todos.add(miPrenda);
        }
        db.cerrarConexion();
        return todos;
    }

    public ArrayList listarIdsTipos() throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "select id from tipo_prenda ";
        ResultSet resultado = db.seleccion(query);
        int micodigo = 0;
        ArrayList todos = new ArrayList();
        while (resultado.next()) {
            micodigo = (resultado.getInt(1));
            todos.add(micodigo);
        }
        db.cerrarConexion();
        return todos;
    }

    /////////////////////////////        GENEROS         //////////////////////////////////////////////////////////
    public ArrayList listarGenero() throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "select * from genero_usuario ";
        ResultSet resultado = db.seleccion(query);
        Genero_Usuario miGenero = null;
        ArrayList todos = new ArrayList();
        while (resultado.next()) {
            miGenero = new Genero_Usuario();
            miGenero.setId(resultado.getInt(1));
            miGenero.setDescripcion(resultado.getString(2));
            todos.add(miGenero);
        }
        db.cerrarConexion();
        return todos;
    }

    public ArrayList listarIds() throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "select id from genero_usuario ";
        ResultSet resultado = db.seleccion(query);
        int micodigo = 0;
        ArrayList todos = new ArrayList();
        while (resultado.next()) {
            micodigo = (resultado.getInt(1));
            todos.add(micodigo);
        }
        db.cerrarConexion();
        return todos;
    }
    ///////////////////////////////////////////// COLORES  ///////////////////////////////////////////////

    public ArrayList listarColor() throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "select * from color ";
        ResultSet resultado = db.seleccion(query);
        Color_Prenda miColor = null;
        ArrayList todos = new ArrayList();
        while (resultado.next()) {
            miColor = new Color_Prenda();
            miColor.setId(resultado.getInt(1));
            miColor.setColor(resultado.getString(2));
            todos.add(miColor);
        }
        db.cerrarConexion();
        return todos;
    }

    public ArrayList listarIdsColor() throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "select id from color ";
        ResultSet resultado = db.seleccion(query);
        int micodigo = 0;
        ArrayList todos = new ArrayList();
        while (resultado.next()) {
            micodigo = (resultado.getInt(1));
            todos.add(micodigo);
        }
        db.cerrarConexion();
        return todos;
    }

    /////////////////////////////////////  USUARIOS    /////////////////////////////////////////////////////////
    public Usuario buscarUsuario(String cedula) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "select * from usuario where cedula ='" + cedula + "'";
        ResultSet resultado = db.seleccion(query);
        Usuario miUsuario = null;
        if (resultado != null) {
            resultado.next();
            miUsuario = new Usuario();
            miUsuario.setCedula(resultado.getString("Cedula"));
            miUsuario.setApodo(resultado.getString("Apodo"));
            miUsuario.setGenero(buscarGenero(resultado.getInt("Id_genero")));
            miUsuario.setFecha_nacimiento(resultado.getDate("Fecha_nacimiento"));
            try {
                miUsuario.setFoto(ConvertirImagen(resultado.getBytes("Foto")));
            } catch (IOException ex) {
                System.err.println(ex.getMessage());
            }
        }
        db.cerrarConexion();
        return miUsuario;
    }

    public Usuario comprobarIngreso(String apodo, String cedula) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "select * from usuario where cedula ='" + cedula + "' and apodo='" + apodo + "'";
        ResultSet resultado = db.seleccion(query);
        Usuario miUsuario = null;
        if (resultado != null) {
            resultado.next();
            miUsuario = new Usuario();
            miUsuario.setCedula(resultado.getString("Cedula"));
            miUsuario.setApodo(resultado.getString("Apodo"));
            miUsuario.setGenero(buscarGenero(resultado.getInt("Id_genero")));
            try {
                miUsuario.setFoto(ConvertirImagen(resultado.getBytes("Foto")));
            } catch (IOException ex) {
                System.err.println(ex.getMessage());
            }
        }
        db.cerrarConexion();
        return miUsuario;
    }

    private Image ConvertirImagen(byte[] bytes) throws IOException {
        ByteArrayInputStream bis = new ByteArrayInputStream(bytes);
        Iterator readers = ImageIO.getImageReadersByFormatName("jpeg");
        ImageReader reader = (ImageReader) readers.next();
        Object source = bis;
        ImageInputStream iis = ImageIO.createImageInputStream(source);
        reader.setInput(iis, true);
        ImageReadParam param = reader.getDefaultReadParam();
        return reader.read(0, param);
    }

    public boolean grabarUsuario(Usuario miUsuario, String ruta) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "insert into usuario (cedula,apodo,id_genero,fecha_nacimiento) values('" + miUsuario.getCedula() + "','" + miUsuario.getApodo() + "','" + miUsuario.getGenero().getId() + "','" + miUsuario.getFecha_nacimiento() + "')";

        Boolean resultado = db.ingreso(query);
        db.cerrarConexion();
        return resultado;
    }

    public ArrayList listarUsuario() throws SQLException {
        ArrayList todos = new ArrayList();
        todos = db.Lista_Users();
        return todos;
    }

    public boolean modificarFoto(Usuario miUser, String ruta) throws SQLException {
        if (db.grabarFOTO(miUser, ruta)) {
            return true;
        } else {
            return false;
        }
    }

    public int modificarUsuario(Usuario miUser) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "update usuario set apodo='" + miUser.getApodo() + "', id_genero='" + miUser.getGenero().getId()
                + "', fecha_nacimiento='" + miUser.getFecha_nacimiento() + "' where cedula='" + miUser.getCedula() + "'";

        int resultado = db.modificacioneliminacion(query);
        db.cerrarConexion();
        return resultado;
    }

    public boolean comprobarLogeo(String apodo, String cedula) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "Select cedula from usuario where apodo='" + apodo
                + "' and cedula ='" + cedula + "'";
        boolean r;
        ResultSet resultado = db.seleccion(query);
        if (resultado.equals(null)) {
            r = false;
        } else {
            r = true;
        }

        db.cerrarConexion();
        return r;
    }
    ///////////////////////////LOGEO/////////////////////////////////////////////

    public boolean grabarRegistroLogeo(Registro_Logeo logeo) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "insert into registro_logueo (id_usuario,id,fecha,hora_inicio,hora_fin)" + "values('" + logeo.getUsuario().getCedula() + "','" + logeo.getId() + "','" + logeo.getFecha() + "','" + logeo.getHora_inicio() + "','" + logeo.getHora_fin() + "')";
        Boolean resultado = db.ingreso(query);
        db.cerrarConexion();
        return resultado;
    }
    ///////////////////////////////// PRENDAS /////////////////////////////////////////////////////////

    public boolean grabarPrenda(Prenda miPrenda, String ruta) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        //String cedd="0104645676";
        String query = "insert into prenda (num_usos, num_lavado, ultimo_lavado, id_estado_prenda, id_usuario, fecha, id_tipo_prenda, id_color, nombre) "
                + "values('" + 0 + "','" + 0 + "', current_date ,'" + miPrenda.getEstado_prenda().getId() + "','" + miPrenda.getUsuario().getCedula() + "', current_date ,'" + miPrenda.getTipo_prenda().getId() + "','" + miPrenda.getColor().getId() + "','" + miPrenda.getNombre() + "')";
        Boolean resultado = db.ingreso(query);
        db.cerrarConexion();
        return resultado;
    }

    public ArrayList listarIdsPrendas() throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "select id from prenda ";
        ResultSet resultado = db.seleccion(query);
        int micodigo = 0;
        ArrayList todos = new ArrayList();
        while (resultado.next()) {
            micodigo = (resultado.getInt(1));
            todos.add(micodigo);
        }
        db.cerrarConexion();
        return todos;
    }

    public ArrayList listarPrenda() throws SQLException {
        ArrayList todos = new ArrayList();
        todos = db.Lista_Ropas();
        return todos;
    }
 public ArrayList listarPrendaUser(String ced) throws SQLException {
        ArrayList todos = new ArrayList();
        todos = db.Lista_RopasSegunUser(ced);
        return todos;
    }
    public Prenda buscarIDEPrenda(String nombre, int idtipo, int Idcolor) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "select id from prenda where nombre ='" + nombre + "' and id_color= '" + Idcolor + "' and id_tipo_prenda= '" + idtipo + "'";
        ResultSet resultado = db.seleccion(query);
        Prenda miPrenda = null;
        if (resultado != null) {
            resultado.next();
            miPrenda = new Prenda();
            miPrenda.setId(resultado.getInt("id"));
        }
        db.cerrarConexion();
        return miPrenda;

    }

    public Prenda buscarPrendas(int codigo) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "select * from prenda where id ='" + codigo + "'";
        ResultSet resultado = db.seleccion(query);
        Prenda miPrenda = null;
        if (resultado != null) {
            resultado.next();
            miPrenda = new Prenda();
            miPrenda.setId(resultado.getInt("id"));
            miPrenda.setNombre(resultado.getString("nombre"));
            miPrenda.setColor(buscarColor(resultado.getInt("id_color")));
            //FALTA MAS CAMPOS
            try {
                miPrenda.setFoto(ConvertirImagen(resultado.getBytes("Foto")));
            } catch (IOException ex) {
                System.err.println(ex.getMessage());
            }
        }
        db.cerrarConexion();
        return miPrenda;
    }

    public boolean modificarFotoPrenda(Prenda miPRenda, String ruta) throws SQLException {
        if (db.grabarFOTOPrenda(miPRenda, ruta)) {
            return true;
        } else {
            return false;
        }
    }
//////////////////////////////// REGISTRO MEDIDAS  ///////////////////////////////

    public boolean grabarRegistroMedidas(Registro_Medidas miRegistro) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "insert into registro_medidas (fecha,peso,id_usuario) values( current_date ,'" + miRegistro.getPeso() + "','" + miRegistro.getUsuario().getCedula() + "')";
        Boolean resultado = db.ingreso(query);
        db.cerrarConexion();
        return resultado;
    }

    public Registro_Medidas buscarRegistroID(Double peso, String cedula) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "select id from registro_medidas where peso ='" + peso + "' and id_usuario= '" + cedula + "'";
        ResultSet resultado = db.seleccion(query);
        Registro_Medidas miRegistro = null;
        if (resultado != null) {
            resultado.next();
            miRegistro = new Registro_Medidas();
            miRegistro.setId(resultado.getInt("id"));
        }
        db.cerrarConexion();
        return miRegistro;
    }

    public ArrayList listarIdsReg() throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "select id from genero_usuario ";
        ResultSet resultado = db.seleccion(query);
        int micodigo = 0;
        ArrayList todos = new ArrayList();
        while (resultado.next()) {
            micodigo = (resultado.getInt(1));
            todos.add(micodigo);
        }
        db.cerrarConexion();
        return todos;
    }

    public ArrayList listarRegistro(String user) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "select * from registro_medidas where id_usuario ='" + user + "'";
        ResultSet resultado = db.seleccion(query);
        Registro_Medidas miRegi = null;
        ArrayList todos = new ArrayList();
        while (resultado.next()) {
            miRegi = new Registro_Medidas();
            miRegi.setId(resultado.getInt(1));
            miRegi.setFecha(resultado.getDate(2));
            miRegi.setPeso(resultado.getDouble(3));
            miRegi.setUsuario(buscarUsuario(resultado.getString(4)));

            todos.add(miRegi);
        }
        db.cerrarConexion();
        return todos;
    }

    ///////////////////////////// MEDIDAS USUARIO /////////////////////
    public boolean grabarMedidaUser(int reg, int med, int valor, String cedu) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "insert into medidas_usuario (id_registro,id_medida,valor,id_usuario) values('" + reg + "','" + med + "','" + valor + "','" + cedu + "')";
        Boolean resultado = db.ingreso(query);
        db.cerrarConexion();
        return resultado;
    }

    public ArrayList listarMedida(int reg) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "select * from medidas_usuario where id_registro ='" + reg + "'";
        ResultSet resultado = db.seleccion(query);
        Medidas_Usuario miRegi = null;
        ArrayList todos = new ArrayList();
        while (resultado.next()) {
            miRegi = new Medidas_Usuario();
            miRegi.setMedida(buscarMedida(resultado.getInt(2)));
            miRegi.setValor(resultado.getInt(3));
            todos.add(miRegi);
        }
        db.cerrarConexion();
        return todos;
    }

    public Medida_Prenda buscarMedida(int codigo) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "select * from medida_prenda where id ='" + codigo + "'";
        ResultSet resultado = db.seleccion(query);//cada tupla, recibir reulset y pasar al array pa q no se borre x cerrarse la conexin
        Medida_Prenda miMedida = null;
        if (resultado != null) {
            resultado.next();
            miMedida = new Medida_Prenda();

            miMedida.setDescripcion(resultado.getString("descripcion"));
        }
        db.cerrarConexion();
        return miMedida;
    }

    /////////////////////////BUSQUEDA PRENDAS///////////////////////////////////
    public ArrayList buscarPrendas(int tipo, String ced) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "{ ? = call buscar_prendas(" + tipo + ",'" + ced + "')}";
        Connection var = db.db.getConnection();
        CallableStatement stmt = var.prepareCall(query);
        stmt.registerOutParameter(1, Types.OTHER);
        ResultSet resultado = db.callProcedure(stmt);
        Busqueda_Prenda datosPrenda = null;
        ArrayList todos = new ArrayList();
        while (resultado.next()) {
            datosPrenda = new Busqueda_Prenda();
            datosPrenda.setId(resultado.getInt(1));
            datosPrenda.setDescripcion(resultado.getString(2));
            datosPrenda.setTipo(resultado.getString(3));
            datosPrenda.setEstado(resultado.getString(4));
            datosPrenda.setColor(resultado.getString(5));
            datosPrenda.setNum_usos(resultado.getInt(6));
            datosPrenda.setUltimo_uso(resultado.getDate(7));
            todos.add(datosPrenda);
        }

        db.cerrarConexion();
        return todos;

    }

    //////////////////////// CLASIFICADORES  //////////////////////
    public boolean grabarClasificador(Clasificador miClasificador) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "insert into clasificador (descripcion) values('" + miClasificador.getDescripcion() + "')";

        Boolean resultado = db.ingreso(query);
        db.cerrarConexion();
        return resultado;
    }

    public ArrayList listarClasificador() throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "select * from clasificador ";
        ResultSet resultado = db.seleccion(query);
        Clasificador miColor = null;
        ArrayList todos = new ArrayList();
        while (resultado.next()) {
            miColor = new Clasificador();
            miColor.setId(resultado.getInt(1));
            miColor.setDescripcion(resultado.getString(2));
            todos.add(miColor);
        }
        db.cerrarConexion();
        return todos;
    }

    public ArrayList buscarPrendasLavanderia(String ced) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "{ ? = call buscar_prendas_lavanderia('" + ced + "')}";
        Connection var = db.db.getConnection();
        CallableStatement stmt = var.prepareCall(query);
        stmt.registerOutParameter(1, Types.OTHER);
        ResultSet resultado = db.callProcedure(stmt);
        Busqueda_Prenda_Lavanderia datosPrenda = null;
        ArrayList todos = new ArrayList();
        while (resultado.next()) {
            datosPrenda = new Busqueda_Prenda_Lavanderia();
            datosPrenda.setId(resultado.getInt(1));
            datosPrenda.setNombre(resultado.getString(2));
            datosPrenda.setTipo(resultado.getString(3));
            datosPrenda.setColor(resultado.getString(4));
            datosPrenda.setNum_lavado(resultado.getInt(5));
            datosPrenda.setFecha_lavado(resultado.getDate(6));
            datosPrenda.setDias_restantes(resultado.getInt(7));
            todos.add(datosPrenda);
        }
        db.cerrarConexion();
        return todos;
    }

    public int devolverPrenda(ArrayList prendas) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        int i;
        String query = null;
        for (i = 0; i < prendas.size(); i++) {
            query = "update prenda set id_estado_prenda ='" + 2
                    + "' where id='" + prendas.get(i) + "'";
        }
        int resultado = db.modificacioneliminacion(query);
        db.cerrarConexion();
        return resultado;
    }

    public Clasificador buscarClasificador(int codigo) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "select * from clasificador where id ='" + codigo + "'";
        ResultSet resultado = db.seleccion(query);//cada tupla, recibir reulset y pasar al array pa q no se borre x cerrarse la conexin
        Clasificador miClasif = null;
        if (resultado != null) {
            resultado.next();
            miClasif = new Clasificador();
            miClasif.setId(resultado.getInt("id"));
            miClasif.setDescripcion(resultado.getString("descripcion"));
        }
        db.cerrarConexion();
        return miClasif;
    }
    ///////////////////////////////  VALORES  ////////////////////////

    public boolean grabarValor(Valor mivalor, int ide) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "insert into valor (id_clasificador, descripcion,id) values('" + mivalor.getClasificador().getId() + "','" + mivalor.getDescripcion() + "','" + ide + "')";

        Boolean resultado = db.ingreso(query);
        db.cerrarConexion();
        return resultado;
    }

    public int retornaCodigoValor(int clasifica) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "select count(id_clasificador) from valor  where id_clasificador='" + clasifica + "'";
        ResultSet resultado = db.seleccion(query);//cada tupla, recibir reulset y pasar al array pa q no se borre x cerrarse la conexin
        int codigo = -1;
        if (resultado != null) {
            resultado.next();
            codigo = (resultado.getInt(1));
            codigo = codigo + 1;
        }
        db.cerrarConexion();
        return codigo;
    }

    public ArrayList buscarValor(int codigo) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "select * from valor where id_clasificador ='" + codigo + "'";
        ResultSet resultado = db.seleccion(query);//cada tupla, recibir reulset y pasar al array pa q no se borre x cerrarse la conexin
        Valor miValor = null;
        ArrayList todos = new ArrayList();
        while (resultado.next()) {
            miValor = new Valor();
            miValor.setId(resultado.getInt(2));
            miValor.setDescripcion(resultado.getString(3));
            todos.add(miValor);
        }
        db.cerrarConexion();
        return todos;
    }

    public ArrayList listarValores() throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "select * from valor ";
        ResultSet resultado = db.seleccion(query);
        Valor miValor = null;
        ArrayList todos = new ArrayList();
        while (resultado.next()) {
            miValor = new Valor();
            miValor.setId(resultado.getInt(2));
            miValor.setDescripcion(resultado.getString(3));
            todos.add(miValor);
        }
        db.cerrarConexion();
        return todos;
    }
    ////////////// UBICACIONES ///////////////////////

    public ArrayList listarUbicaciones() throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "select * from ubicacion ";
        ResultSet resultado = db.seleccion(query);
        ubicacion miUbica = null;
        ArrayList todos = new ArrayList();
        while (resultado.next()) {
            miUbica = new ubicacion();
            miUbica.setId(resultado.getInt(1));
            miUbica.setDescripcion(resultado.getString(2));
            todos.add(miUbica);
        }
        db.cerrarConexion();
        return todos;
    }

    public ubicacion buscarUbicacion(int codigo) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "select * from ubicacion where id ='" + codigo + "'";
        ResultSet resultado = db.seleccion(query);//cada tupla, recibir reulset y pasar al array pa q no se borre x cerrarse la conexin
        ubicacion miUbica = null;
        if (resultado != null) {
            resultado.next();
            miUbica = new ubicacion();
            miUbica.setId(resultado.getInt("id"));
            miUbica.setDescripcion(resultado.getString("descripcion"));
        }
        db.cerrarConexion();
        return miUbica;
    }

    public boolean grabarTipo(Tipo_Prenda mitipo) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "insert into tipo_prenda (descripcion,id_ubicacion) values('" + mitipo.getDescripcion() + "','" + mitipo.getUbicacion().getId() + "')";

        Boolean resultado = db.ingreso(query);
        db.cerrarConexion();
        return resultado;
    }

    /////////////////////////BUSQUEDA CONUUNTOS///////////////////////////////////
    public ArrayList buscarPrendaConjunto(int id) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "{ ? = call buscar_prendas_conjunto(" + id + ")}";
        Connection var = db.db.getConnection();
        CallableStatement stmt = var.prepareCall(query);
        stmt.registerOutParameter(1, Types.OTHER);
        ResultSet resultado = db.callProcedure(stmt);
        Prenda p = null;
        ArrayList todos = new ArrayList();
        while (resultado.next()) {
            p = new Prenda();
            p.setId(resultado.getInt(1));
            p.setNombre(resultado.getString(2));

            todos.add(p);
        }

        db.cerrarConexion();
        return todos;

    }

    /////////////////////////BUSQUEDA CONUUNTOS///////////////////////////////////
    public ArrayList buscarConjuntos(String ced) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "{ ? = call buscar_conjuntos('" + ced + "')}";
        Connection var = db.db.getConnection();
        CallableStatement stmt = var.prepareCall(query);
        stmt.registerOutParameter(1, Types.OTHER);
        ResultSet resultado = db.callProcedure(stmt);
        BusquedaConjunto datosConj = null;
        ArrayList todos = new ArrayList();
        while (resultado.next()) {
            datosConj = new BusquedaConjunto();
            datosConj.setId(resultado.getInt(1));
            datosConj.setDescripcion(resultado.getString(2));
            datosConj.setUlt_calificacion(resultado.getInt(3));
            datosConj.setUltimo_uso(resultado.getDate(4));
            todos.add(datosConj);
        }

        db.cerrarConexion();
        return todos;

    }

    public int calificarRegistroConjunto(Registro_Conjunto rc) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "update registro_conjunto set calificacion=" + rc.getCalificacion() + " where id_conjunto=" + rc.getConjunto().getId() + " and id=" + rc.getId();

        int resultado = db.modificacioneliminacion(query);
        db.cerrarConexion();
        return resultado;
    }

    public boolean comentarRegistroConjunto(Comentario c) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "insert into comentario (comentario,id_registro,id_conjunto) values('" + c.getComentario() + "'," + c.getRegistro().getId() + "," + c.getRegistro().getConjunto().getId() + ")";

        Boolean resultado = db.ingreso(query);
        db.cerrarConexion();
        return resultado;
    }
   ////////////////////////// ATRIBUTOS PROPIOS///////////////
      public boolean grabarAtributo(Atributo_Propio miatrib) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "insert into atributo_propio (descripcion) values('" + miatrib.getDescripcion() + "')";

        Boolean resultado = db.ingreso(query);
        db.cerrarConexion();
        return resultado;
    }
       public Atributo_Propio buscarIDEAtributo(String nombre) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "select id from atributo_propio where descripcion ='" + nombre + "'";
        ResultSet resultado = db.seleccion(query);
        Atributo_Propio miAtrib = null;
        if (resultado != null) {
            resultado.next();
            miAtrib = new Atributo_Propio();
            miAtrib.setId(resultado.getInt("id"));
        }
        db.cerrarConexion();
        return miAtrib;
    }
       ///////////// RELACIO ATRIBUTO TIUPO PRENDA /////////////
        public boolean grabarRelacionAtrib(Tiene_Atrib miatrib) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "insert into tiene_atrib (id_atributo, id_tipo_prenda) values('" + miatrib.getAtributo().getId()  +"','"+miatrib.getTipo_prenda().getId()+"')";

        Boolean resultado = db.ingreso(query);
        db.cerrarConexion();
        return resultado;
    }
        ///////////////////CLASIFICADOR PRENDA /////////////////////
         public boolean grabarClasificador_Prenda(Clasificador_Prenda miClasificador) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "insert into clasificador_prenda (id_clasificador, id_tipo_prenda) values('" + miClasificador.getClasificador().getId() +"','"+miClasificador.getTipo().getId()+"')";

        Boolean resultado = db.ingreso(query);
        db.cerrarConexion();
        return resultado;
    }

    public int calificarPrenda(int calif, String us) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "update compartir set calificacion=" + calif + " where id_usuario='" + us + "'";

        int resultado = db.modificacioneliminacion(query);
        db.cerrarConexion();

        return resultado;
    }

    public int calificarPrenda2(int calif, String us, int prend) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "update prenda set calificacion=" + calif + " where id_usuario='" + us + "' and id=" + prend;

        int resultado = db.modificacioneliminacion(query);
        db.cerrarConexion();

        return resultado;
    }

    public boolean usarPrendas(int prend, String us) throws SQLException {

        OperacionesBase db = new OperacionesBase();
        String query = "insert into registro_uso (id_usuario,id_prenda,fecha) values('" + us + "'," + prend + ",current_date)";
        Boolean resultado = db.ingreso(query);
        db.cerrarConexion();

        db = new OperacionesBase();
        query = "update prenda set id_estado_prenda=2 where id=" + prend;

        int resultado2 = db.modificacioneliminacion(query);
        db.cerrarConexion();

        return resultado;

    }

    public boolean grabarPrendasConjunto(int prend) throws SQLException {

        OperacionesBase db = new OperacionesBase();
        String query;
        Boolean resultado;

        OperacionesBase db2 = new OperacionesBase();
        String query2 = "select max(id) from conjunto";
        ResultSet resultado2 = db.seleccion(query2);
        int id_conjunto = 0;
        while (resultado2.next()) {
            id_conjunto = resultado2.getInt(1);
        }
        db2.cerrarConexion();

        db = new OperacionesBase();
        query = "insert into conjunto_prenda(id_conjunto,id_prenda) values(" + id_conjunto + "," + prend + ")";
        resultado = db.ingreso(query);
        db.cerrarConexion();

        return true;
    }

    public boolean grabarConjuntoPrenda(String u) throws SQLException {

        OperacionesBase db = new OperacionesBase();
        String query;
        Boolean resultado;

        OperacionesBase db2 = new OperacionesBase();
        String query2 = "select max(id) from conjunto";
        ResultSet resultado2 = db.seleccion(query2);
        int id_conjunto = 0;
        while (resultado2.next()) {
            id_conjunto = resultado2.getInt(1);
        }
        db2.cerrarConexion();


        db = new OperacionesBase();
        query = "insert into registro_conjunto(id_conjunto,id,fecha) values(" + id_conjunto + ",0,current_date)";
        resultado = db.ingreso(query);
        db.cerrarConexion();



        db = new OperacionesBase();
        query = "insert into conjunto_usuario(id_conjunto,id_usuario) values(" + id_conjunto + ",'" + u + "')";
        resultado = db.ingreso(query);
        db.cerrarConexion();

        return true;
    }

    public boolean grabarConjunto(String u, String desc) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "insert into conjunto (descripcion) values('" + desc + "')";
        Boolean resultado = db.ingreso(query);
        db.cerrarConexion();

        return resultado;
    }

    public boolean compartirPrenda(String ced, int idp) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "insert into compartir (id_usuario,id_prenda) values('" + ced + "'," + idp + ")";
        Boolean resultado = db.ingreso(query);
        db.cerrarConexion();
        return resultado;
    }

    public ArrayList buscarPrendasD(String ced) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "{ ? = call buscar_prendas_d('" + ced + "')}";
        Connection var = db.db.getConnection();
        CallableStatement stmt = var.prepareCall(query);
        stmt.registerOutParameter(1, Types.OTHER);
        ResultSet resultado = db.callProcedure(stmt);
        Busqueda_Prenda_Defectos datosConj = null;
        ArrayList todos = new ArrayList();
        while (resultado.next()) {
            datosConj = new Busqueda_Prenda_Defectos();
            datosConj.setId(resultado.getInt(1));
            datosConj.setNombre(resultado.getString(2));
            datosConj.setTipo(resultado.getString(3));
            datosConj.setNum_defectos(resultado.getInt(4));
            todos.add(datosConj);
        }
        db.cerrarConexion();
        return todos;
    }



    public ArrayList buscarDefectoP(int ced) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "{ ? = call buscar_defectos_prenda('" + ced + "')}";
        Connection var = db.db.getConnection();
        CallableStatement stmt = var.prepareCall(query);
        stmt.registerOutParameter(1, Types.OTHER);
        ResultSet resultado = db.callProcedure(stmt);
        Busqueda_Defectos_Prenda datosConj = null;
        ArrayList todos = new ArrayList();
        while (resultado.next()) {
            datosConj = new Busqueda_Defectos_Prenda();
            datosConj.setDefecto(resultado.getString(1));
            datosConj.setGrado(resultado.getString(2));
            datosConj.setSolucion(resultado.getString(3));
            todos.add(datosConj);
        }
        db.cerrarConexion();
        return todos;
    }
}